package com.spring.demo.untils.parse;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.spring.demo.untils.dto.OpenRes;
import com.spring.demo.untils.dto.Result;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author xuweizhi
 * @since 2023/07/06 17:40
 */
public interface ResponseParse<T> {

    Gson GSON = new Gson();

    ThreadLocal<Map<String, Object>> holder = new ThreadLocal<>();

    /**
     * 获取唯一标志
     *
     * @param suffixUrl //
     * @param routerId  //
     * @return //
     */
    boolean matchParse(String suffixUrl, Long routerId);

    /**
     * 解析返回值
     *
     * @param openRes //
     * @return //
     */
    default Result<String> parseResponseBody(OpenRes openRes) {
        return GSON.fromJson(openRes.getOriginRequest().getBody(), new TypeToken<Result<String>>() {
        }.getType());
    }

    /**
     * value
     *
     * @param openRes //
     */
    default void setCache(OpenRes openRes) {
        Map<String, Object> map = holder.get();
        if (map == null) {
            map = new HashMap<>();
        }
        map.put(openRes.getTid(), openRes);
        holder.set(map);
    }

    /**
     * 解析请求体
     *
     * @param openRes 请求体
     * @return //
     */
    T parseRequestBody(OpenRes openRes);

    /**
     * 业务处理
     *
     * @param data //
     */
    void execute(List<T> data);
}
